#ifndef _WDT_H__
#define _WDT_H__
#ifdef __cplusplus
extern "C"
{
#endif
    /*
        Chinese is encoded in Unicode. If it is garbled, please change the encoding method of the editor.
        WDT库 By启凡科创 适用于STC8、STC15平台MCU
        version:v1.0.0  2022-11-7
    */

#include "LIB_CONFIG.h"
#ifndef WDT_EN
#define WDT_EN 0 // 如果配置文件未定义，则用户自定义，0禁用模块不不编译，1启用模块
#endif

#if WDT_EN

    typedef enum
    {
        wdt_clk_sys_clk_d2,   // 系统时钟/2
        wdt_clk_sys_clk_d4,   // 系统时钟/4
        wdt_clk_sys_clk_d8,   // 系统时钟/8
        wdt_clk_sys_clk_d16,  // 系统时钟/16
        wdt_clk_sys_clk_d32,  // 系统时钟/32
        wdt_clk_sys_clk_d64,  // 系统时钟/64
        wdt_clk_sys_clk_d128, // 系统时钟/128
        wdt_clk_sys_clk_d256, // 系统时钟/256
    } wdt_clk;                // 看门狗时钟分频系数

    typedef enum
    {
        wdt_idle_stop, // 掉电模式停止看门狗
        wdt_idle_work  // 掉电模式看门狗继续工作
    } wdt_idle_mode;

    /**
     * @brief 初始化看门狗，时间计算公式为：（12*32768*clk）/sys_clk，
     * 如clk为wdt_clk_sys_clk_d32，系统时钟为24M，则计算结果为：
     * (12*32768*32)/24000000 = 0.524288 约等于0.5S
     *
     * @param clk 看门狗计数器分频系数：
     * @param ··wdt_clk_sys_clk_d2 系统时钟/2
     * @param ··wdt_clk_sys_clk_d4 系统时钟/4
     * @param ··wdt_clk_sys_clk_d8 系统时钟/8
     * @param ··wdt_clk_sys_clk_d16 系统时钟/16
     * @param ··wdt_clk_sys_clk_d32 系统时钟/32
     * @param ··wdt_clk_sys_clk_d64 系统时钟/64
     * @param ··wdt_clk_sys_clk_d128 系统时钟/128
     * @param ··wdt_clk_sys_clk_d256 系统时钟/256
     * @param --
     * @param mode 掉电模式看门狗是否工作：
     * @param ··wdt_idle_stop 掉电模式停止看门狗
     * @param ··wdt_idle_work 掉电模式看门狗继续工作
     */
    void wdt_begin(wdt_clk clk, wdt_idle_mode mode);

    /**
     * @brief 喂狗
     */
    void wdt_feed();

    /**
     * @brief 关闭看门狗
     */
    void wdt_end();

#endif
#ifdef __cplusplus
}
#endif
#endif
